﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcademiaDAO;
using AcademiaEntidades;
using System.Web.Security;

public partial class Administracion_Cobro : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Para controlar el botan para atras del navegador
        if (Session["Usuario"] == null)
            Response.Redirect("~/Publico/Login.aspx");
        if (!IsPostBack)
        {
            panelBuscarAlumno.Visible = true;
            txtLegajoBuscar.Focus();
            panelRegistrarCobro.Visible = false;
            cargarSesion();//Cargar los datos de session
        }
    }
    private void cargarSesion()
    {
        lblUsuarioLogueado.Text = ((Usuarios)Session["Usuario"]).Usuario;
        lblRolLogueado.Text = ((Usuarios)Session["Usuario"]).Rol;
    }
    protected void btnBuscarAlumnoPorLegajo_Click(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(txtLegajoBuscar.Text.Trim()))
        {
            int legajo = int.Parse(txtLegajoBuscar.Text.Trim());
            try
            {
                Alumno alumno = AlumnoDAO.ObtenerPorLegajo(legajo);

                if (alumno != null)
                {
                    lblResBuscar.ForeColor = System.Drawing.Color.Gray;
                    lblResBuscar.Text = string.Format("{1}, {0}", alumno.Nombre, alumno.Apellido);

                    ViewState["alumno"] = alumno;

                    panelRegistrarCobro.Visible = true;
                    CargarMatriculasAlumno();
                }
                else
                {
                    lblResBuscar.Text = string.Format("No se encontró el alumno con legajo {0}", legajo);
                    panelRegistrarCobro.Visible = false;
                    LimpiarStateAlumno();
                }
            }
            catch (Exception ex)
            {
                lblResRegistro.ForeColor = System.Drawing.Color.Red;
                lblResRegistro.Text = "No se pudo obtener los datos del alumno";
                panelRegistrarCobro.Visible = false;
                LimpiarStateAlumno();
            }
        }
        else
        {
            lblResBuscar.ForeColor = System.Drawing.Color.Gray;
            lblResBuscar.Text = string.Empty;
        }
    }

    protected void btnRegistrarCobro_Click(object sender, EventArgs e)
    {
        if (ViewState["alumno"] != null)
        {
            panelRegistrarCobro.Visible = true;
            CargarMatriculasAlumno();
        }
    }

    private void CargarMatriculasAlumno()
    {
        Alumno a = (Alumno)ViewState["alumno"];
        CuotaMatriculaDAO.ObtenerPorAlumnoTable(a.IdAlumno);
        gvMatriculas.DataSource = CuotaMatriculaDAO.ObtenerPorAlumnoTable(a.IdAlumno);
        gvMatriculas.DataBind();

        btnConfirmarCobro.Visible = gvMatriculas.Rows.Count > 0;
    }

    protected void btnConfirmarCobro_Click(object sender, EventArgs e)
    {
        List<GridViewRow> filas = ObtenerFilasSeleccionadas();

        if (filas.Count > 0)
        {
            int idAlumno = ((Alumno)ViewState["alumno"]).IdAlumno;
            Cobro cobro = new Cobro()
            {
                Fecha = DateTime.Now,
                IdAlumno = idAlumno
            };

            List<DetalleCobro> detalles = new List<DetalleCobro>();
            foreach (GridViewRow row in filas)
            {
                string a = row.Cells[3].Text.Substring(1);
                decimal monto = Convert.ToDecimal(a);
                int idCuotaMatricula = int.Parse(gvMatriculas.DataKeys[row.RowIndex].Value.ToString());
                DetalleCobro dc = new DetalleCobro()
                {
                    IdCuotaMatricula = idCuotaMatricula,
                    Monto = monto
                };
                detalles.Add(dc);
            }

            try
            {
                CobroDAO.Grabar(cobro, detalles);
                lblResRegistro.ForeColor = System.Drawing.Color.Gray;
                lblResRegistro.Text = "Cobro registrado";

                panelRegistrarCobro.Visible = false;
                txtLegajoBuscar.Text = string.Empty;
                lblResBuscar.Text = string.Empty;
                LimpiarStateAlumno();
            }
            catch (Exception ex)
            {
                lblResRegistro.ForeColor = System.Drawing.Color.Red;
                lblResRegistro.Text = ex.Message;
            }
        }
        else
        {
            lblResRegistro.ForeColor = System.Drawing.Color.Gray;
            lblResRegistro.Text = "Seleccione al menos una cuota";
        }
    }

    private void LimpiarStateAlumno()
    {
        ViewState["alumno"] = null;
    }

    private List<GridViewRow> ObtenerFilasSeleccionadas()
    {
        List<GridViewRow> filas = new List<GridViewRow>();

        foreach (GridViewRow row in gvMatriculas.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                CheckBox chk = (CheckBox)row.FindControl("chkSelec");
                if (((CheckBox)row.FindControl("chkSelec")).Checked)
                {
                    filas.Add(row);
                }
            }
        }
        return filas;
    }
    protected void btnCerrarSesion_Click(object sender, EventArgs e)
    {
        ////Eliminar la cookie
        //Context.Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now;
        ////Terminar la Sesion
        //FormsAuthentication.SignOut();
        //Response.Redirect("~/Publico/InicioWF.aspx");

        //************************************************************
        //Otra forma de eliminar la cookie del equipo del usuario
        if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
        {
            HttpCookie paraBorrar = new HttpCookie(FormsAuthentication.FormsCookieName);
            paraBorrar.Expires = DateTime.Now.AddDays(-1d);
            Response.Cookies.Add(paraBorrar);
        }
        FormsAuthentication.SignOut();
        Session.Abandon();
        Response.Redirect("~/Publico/InicioWF.aspx");
    }
}